// src/store/globalParams.js 或 src/stores/globalParams.js
import { defineStore } from 'pinia';
// 定义并导出一个全局store
export const useGlobalParamsStore = defineStore('globalParams', {
    // 声明全局变量（可以是任意类型：字符串、对象、数组等）
    state: () => ({
        // 全局地址
        globalAddress: [],
        // 参保信息（医疗局）
        isSuredPersonOpen: false,
        // 人员参保（医疗局）
        isHibpersonalInsuranceOpen: false,
        // 婚姻信息
        isMarriageOpen: false,
        // 低保对象
        isSubsistenceAllowanceOpen: false,
        // 社保卡
        isSocialSecurityCardLOpen: false,
        // 人员参保（人社局）
        isHrsspersonalInsuranceOpen: false,
        // 单位基本信息（人社局）
        isUnitInformationOpen: false,
        // 人员基本信息（人社局）——接口获取
        isPersonalInformationOpen: false,
        // 企业退休人员信息（人社局）
        isRetireOpen: false,
        // 单位参保信息
        isUnitInsuranceOpen: false,
        // 人员参保变更信息查询(人社局)
        isPersonnelInsuranceModificationOpen: false,
        //工伤认定结果信息查询(人社局)
        isWorkInjuryRecognitionOpen: false,
        // 工伤待遇支付明细查询(人社局)
        isInjuryPaymentDetailOpen: false,
        //养老生存认证查询(人社局)
        isPensionSurvivalAuthenticationOpen: false,
    }),
    actions: {
        /**
         * 核心方法：合并地址信息
         * @param {{address, source: string, time: null}} newRecord - 传入的新地址对象
         * @param {string} newRecord.address - 地址字符串 (必填)
         * @param {string} newRecord.source - 来源名称 (必填)
         * @param {string} [newRecord.time] - 时间 (可选)
         * @param {int} [newRecord.frq] - 频次 (可选)
         */
        mergeAddress(newRecord){
            if (!newRecord.address || !newRecord.source)
                return;
            // 将各种形式的时间统一
            const parseTimestamp = (timeStr) => {
                if (!timeStr) return 0;
                // 1. 如果已经是数字，直接返回
                if (typeof timeStr === 'number') return timeStr;

                // 2. 处理 "2024年10月" 或 "2024年10月1日"
                // 将 '年' '月' 替换为 '/'，去掉 '日'
                // 结果变成 "2024/10" 或 "2024/10/1"，这在所有浏览器都能识别
                const safeStr = timeStr.toString()
                    .replace('年', '/')
                    .replace('月', '/')
                    .replace('日', '');

                const timestamp = new Date(safeStr).getTime();
                // 如果解析失败（NaN），返回0
                return isNaN(timestamp) ? 0 : timestamp;
            };
            // 地址和来源都是同一个算作同一个地址
            const target = this.globalAddress.find(item =>
                item.address === newRecord.address &&
                item.source === newRecord.source
            );
            // 如果存在则更新时间并且频次加1
            if (target){
                // 频次
                if (newRecord.frq)
                    target.frequency = (target.frequency || 1) + newRecord.frq;
                else
                    target.frequency = (target.frequency || 1) + 1;
                // 更新时间 只保留最新时间
                if (newRecord.time) {
                    // 原来没有时间直接覆盖
                    if (!target.recentTime){
                        target.recentTime = newRecord.time;
                    }else {
                        // 比较最新时间
                        const oldTime = parseTimestamp(target.recentTime);
                        const newTime = parseTimestamp(newRecord.time);
                        // const oldDate = new Date(target.recentTime).getTime();
                        // const newDate = new Date(newRecord.time).getTime();
                        if (newTime > oldTime){
                            target.recentTime = newRecord.time;
                        }
                    }
                }
            }else {
                // 地址不存在，直接新增
                if (!newRecord.frq){
                    this.globalAddress.push({
                        address: newRecord.address,
                        source: newRecord.source,
                        recentTime: newRecord.time || null,
                        frequency: 1
                    });
                }else {
                    this.globalAddress.push({
                        address: newRecord.address,
                        source: newRecord.source,
                        recentTime: newRecord.time || null,
                        frequency: newRecord.frq,
                    });
                }

            }
        },
        setIsSuredPersonOpen(val){
            this.isSuredPersonOpen = val;
        },
        setIsHibpersonalInsuranceOpen(val) {
            this.isHibpersonalInsuranceOpen = val;
        },
        setIsMarriageOpen(val) {
            this.isMarriageOpen = val;
        },
        setIsSubsistenceAllowanceOpen(val) {
            this.isSubsistenceAllowanceOpen = val;
        },
        setIsSocialSecurityCardLOpen(val) {
          this.isSocialSecurityCardLOpen = val;
        },
        setIshrsspersonalInsuranceOpen (val){
            this.isHrsspersonalInsuranceOpen = val;
        },
        setIsunitInformationOpen(val) {
            this.isUnitInformationOpen = val;
        },
        setIsPersonalInformationOpen(val){
            this.isPersonalInformationOpen = val;
        },
        setIsRetireOpen(val) {
            this.isRetireOpen = val;
        },
        setIsUnitInsuranceOpen(val){
            this.isUnitInsuranceOpen = val;
        },
        setIsPersonnelInsuranceModificationOpen(val){
            this.isPersonnelInsuranceModificationOpen = val;
        },
        setIsWorkInjuryRecognitionOpen(val){
            this.isWorkInjuryRecognitionOpen = val;
        },
        setIsInjuryPaymentDetailOpen(val){
            this.isInjuryPaymentDetailOpen = val;
        },
        setIsPensionSurvivalAuthenticationOpen(val){
            this.isPensionSurvivalAuthenticationOpen = val;
        },
    }
});